package com.cash.app.ui.auth.api

import com.cash.app.constant.AppConstant
import com.cash.app.net.BaseResponse
import com.cash.app.ui.auth.model.AuthBankInfoResponse
import com.cash.app.ui.auth.model.AuthBaseInfoResponse
import com.cash.app.ui.auth.model.AuthPersonalInfoResponse
import com.cash.app.ui.auth.model.AuthTypeRequest
import com.cash.app.ui.auth.model.BindBankRequest
import com.cash.app.ui.auth.model.BindBankResponse
import com.cash.app.ui.auth.model.MetaRsp
import com.cash.app.ui.auth.model.OcrACardBackResponse
import com.cash.app.ui.auth.model.OcrACardFrontResponse
import com.cash.app.ui.auth.model.OcrPCardFrontResponse
import com.cash.app.ui.auth.model.OcrRequest
import com.cash.app.ui.auth.model.StepOneRequest
import com.cash.app.ui.auth.model.StepTwoRequest
import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.POST

interface AuthAPIService {
    @POST(AppConstant.API_GET_AUTH_INFO_BY_TYPE)
    suspend fun getAuthInfoByBase(@Body request: AuthTypeRequest): Response<BaseResponse<AuthBaseInfoResponse>>

    @POST(AppConstant.API_GET_AUTH_INFO_BY_TYPE)
    suspend fun getAuthInfoByPersonal(@Body request: AuthTypeRequest): Response<BaseResponse<AuthPersonalInfoResponse>>

    @POST(AppConstant.API_GET_AUTH_INFO_BY_TYPE)
    suspend fun getAuthInfoByBank(@Body request: AuthTypeRequest): Response<BaseResponse<AuthBankInfoResponse>>

    @POST(AppConstant.API_OCR)
    suspend fun getOcrByACardFront(@Body request: OcrRequest): Response<BaseResponse<OcrACardFrontResponse>>

    @POST(AppConstant.API_OCR)
    suspend fun getOcrByACardBack(@Body request: OcrRequest): Response<BaseResponse<OcrACardBackResponse>>

    @POST(AppConstant.API_OCR)
    suspend fun getOcrByPCardFront(@Body request: OcrRequest): Response<BaseResponse<OcrPCardFrontResponse>>

    @POST(AppConstant.API_SUBMIT_STEP_ONE)
    suspend fun submitStepOne(@Body request: StepOneRequest): Response<BaseResponse<Unit>>

    @POST(AppConstant.API_GET_META_DATA)
    suspend fun getMetaData(): Response<BaseResponse<MetaRsp>>

    @POST(AppConstant.API_SUBMIT_STEP_TWO)
    suspend fun submitStepTwo(@Body request: StepTwoRequest): Response<BaseResponse<Unit>>

    @POST(AppConstant.API_BIND_BANK)
    suspend fun bindBank(@Body request: BindBankRequest): Response<BaseResponse<BindBankResponse>>
}